public class Main {
    public static void main(String[] args) {
        // Create nodes
        Node node1 = new Node(0);
        Node node2 = new Node(1);
        Node node3 = new Node(2);
        Node node4 = new Node(3);
        Node node5 = new Node(4);

        // Link nodes in a ring
        node1.setNext(node2);
        node2.setNext(node3);
        node3.setNext(node4);
        node4.setNext(node5);
        node5.setNext(node1);

        // Start the election process
        node5.start();
        node2.start();
        node3.start();
        node1.start();
        node4.start();

        // Wait for all nodes to finish
        try {
            node1.join();
            node2.join();
            node3.join();
            node4.join();
            node5.join();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        // Print a single final snapshot of all nodes
        System.out.println("\nFinal states:");
        System.out.println(node1.toString());
        System.out.println(node2.toString());
        System.out.println(node3.toString());
        System.out.println(node4.toString());
        System.out.println(node5.toString());

    }
}